NodeJS 加载资源失败:服务器在电子邮件验证链接页面api上以状态400(错误请求)响应

您所在的位置:网站首页 verify email是什么意思 NodeJS 加载资源失败:服务器在电子邮件验证链接页面api上以状态400(错误请求)响应

NodeJS 加载资源失败:服务器在电子邮件验证链接页面api上以状态400(错误请求)响应

2023-02-03 21:32| 来源: 网络整理| 查看: 265

我已经确保后端可以很好地与postman一起工作,但是当我尝试在客户端运行代码时,它失败了,并返回响应:加载资源失败:服务器以状态400(错误请求)响应下面是控制用户注册和验证功能的代码/backend/routes/userRoutes.js

userRouter.post( '/signup', expressAsyncHandler(async (req, res) => { try { const newUser = new User({ name: req.body.name, email: req.body.email, password: bcrypt.hashSync(req.body.password), }); const user = await newUser.save(); const verifyToken = await new VerificationToken({ userId: user._id, token: crypto.randomBytes(32).toString('hex'), }).save(); const url = `${process.env.BASE_URL}/${verifyToken._id}/verify/${verifyToken.token}`; await mailTransport(user.email, 'Verify Email', url); res.status(201).send({ message: 'A verification link has been sent to your account, please verify ', }); } catch (error) { res.status(500).send({ message: 'Internal Server Error' }); } }) ); userRouter.get('/:id/verify/:token', async (req, res) => { try { const user = await User.findOne({ _id: req.params.id }); if (!user) return res.status(400).send({ message: 'Invalid Link' }); const verificationToken = await VerificationToken.findOne({ userId: user._id, token: req.params.token, }); if (!verificationToken) return res.status(400).send({ message: 'Invalid link' }); await User.updateOne({ verified: true }); res.status(200).send({ _id: user._id, name: user.name, email: user.email, isAdmin: user.isAdmin, verified: user.verified, token: generateToken(user), message: 'Email verified successfully', }); await verificationToken.remove(); // res.status(200).send({ message: 'Email verified successfully' }); } catch (error) { res.status(500).send({ message: 'Internal Server Error' }); console.log(error); } });

/frontend/src/screens/SignupScreen.js

import React, { useContext, useState, useEffect } from 'react'; import Container from 'react-bootstrap/Container'; import Form from 'react-bootstrap/Form'; import Button from 'react-bootstrap/Button'; import { Helmet } from 'react-helmet-async'; import { Link, useLocation, useNavigate } from 'react-router-dom'; import axios from 'axios'; import { Store } from '../Store'; import { toast } from 'react-toastify'; import { getError} from '../utils'; export default function SignupScreen() { const navigate = useNavigate(); const { search } = useLocation(); const redirectInUrl = new URLSearchParams(search).get('redirect'); const redirect = redirectInUrl ? redirectInUrl : '/signup'; const [name, setName] = useState(''); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [error, setError] = useState(''); const [msg, setMsg] = useState(''); const { state } = useContext(Store); const { userInfo } = state; const submitHandler = async (e) => { e.preventDefault(); if (password !== confirmPassword) { toast.error('Passwords do not match'); return; } try { const { data } = await axios.post(`/api/users/signup`, { name, email, password, confirmPassword, }); setMsg(data.message); setError(data.error); } catch (err) { toast.error(getError(err)); } }; useEffect(() => { if (userInfo) { navigate(redirect); } }, [navigate, redirect, userInfo]); return ( Sign Up Sign Up Name setName(e.target.value)} required /> Email setEmail(e.target.value)} required /> setPassword(e.target.value)} controlId="password" > Password Confirm Password setConfirmPassword(e.target.value)} required /> {msg && {msg}} {error && {error}} Sign Up New customer? Sign In ); }

/frontend/src/screens/VerifyEmailScreen.js

import React, { useContext, useState, useEffect } from 'react'; import Container from 'react-bootstrap/Container'; import Button from 'react-bootstrap/Button'; import { Helmet } from 'react-helmet-async'; import { Link, useLocation, useNavigate, useParams } from 'react-router-dom'; import axios from 'axios'; import { Store } from '../Store'; import { toast } from 'react-toastify'; import { getError, API_URL } from '../utils'; axios.defaults.withCredentials = true; export default function VerifyEmailScreen() { const navigate = useNavigate(); const { search } = useLocation(); const params = useParams(); const redirectInUrl = new URLSearchParams(search).get('redirect'); const redirect = redirectInUrl ? redirectInUrl : '/:id/verify/:token'; const [validUrl, setValidUrl] = useState(''); const { state, dispatch: ctxDispatch } = useContext(Store); const { userInfo } = state; const [msg, setMsg] = useState(''); useEffect(() => { const verifyEmailUrl = async () => { try { const url = await axios.get( `/api/users/${params.id}/verify/${params.token}` ); console.log(url); ctxDispatch({ type: 'USER_SIGNIN', payload: url }); localStorage.setItem('userInfo', JSON.stringify(url)); setMsg(url.message); setValidUrl(true); } catch (error) { getError(error); setValidUrl(false); } }; verifyEmailUrl(); }); return ( Sign Up {validUrl ? ( Email Verified successfully {msg && {msg}. Please Login below} Login ) : ( 404 Not Found )} ); }

App.js//就是在这个时候我得到了一个糟糕的请求响应

后端服务器运行在端口5111,而前端服务器在端口3000,我已经设置代理在前端package.json端口5111。请帮助



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3